raise XendError("can't write guest state file %s: %s" %
(dst, ex[1]))
+ def domain_usb_add(self, domid, dev_id):
+ dominfo = self.domain_lookup_nr(domid)
+ if not dominfo:
+ raise XendInvalidDomain(str(domid))
+
+ usb = dominfo.info['platform'].get('usb')
+ if not usb:
+ raise XendError("Can't add usb device to a guest with usb disabled in configure file")
+
+ hvm = dominfo.info.is_hvm()
+ if not hvm:
+ raise XendError("Can't add usb device to a non-hvm guest")
+
+ if dominfo._stateGet() != DOM_STATE_HALTED:
+ dominfo.image.signalDeviceModel("usb-add",
+ "usb-added", dev_id)
+ else:
+ log.debug("error: Domain is not running!")
+
+
+ def domain_usb_del(self, domid, dev_id):
+ dominfo = self.domain_lookup_nr(domid)
+ if not dominfo:
+ raise XendInvalidDomain(str(domid))
+
+ usb = dominfo.info['platform'].get('usb')
+ if not usb:
+ raise XendError("Can't add usb device to a guest with usb disabled in configure file")
+
+ hvm = dominfo.info.is_hvm()
+ if not hvm:
+ raise XendError("Can't del usb to a non-hvm guest")
+
+ if dominfo._stateGet() != DOM_STATE_HALTED:
+ dominfo.image.signalDeviceModel("usb-del",
+ "usb-deleted", dev_id)
+ else:
+ log.debug("error: Domain is not running!")
+
def domain_pincpu(self, domid, vcpu, cpumap):
"""Set which cpus vcpu can use
self.acceptCommand(req)
return self.xd.domain_reset(self.dom.getName())
+ def op_usb_add(self, op, req):
+ self.acceptCommand(req)
+ return req.threadRequest(self.do_usb_add, op, req)
+
+ def do_usb_add(self, _, req):
+ return self.xd.domain_usb_add(self.dom.getName(), req)
+
+ def op_usb_del(self, op, req):
+ self.acceptCommand(req)
+ return req.threadRequest(self.do_usb_add, op, req)
+
+ def do_usb_del(self, _, req):
+ return self.xd.domain_usb_add(self.dom.getName(), req)
def render_POST(self, req):
return self.perform(req)
'vcpu-set' : ('<Domain> <vCPUs>',
'Set the number of active VCPUs for allowed for the'
' domain.'),
+ #usb
+ 'usb-add' : ('<domain> <[host:bus.addr] [host:vendor_id:product_id]>','Add the usb device to FV VM.'),
+ 'usb-del' : ('<domain> <[host:bus.addr] [host:vendor_id:product_id]>','Delete the usb device to FV VM.'),
# device commands
"top",
"unpause",
"uptime",
+ "usb-add",
+ "usb-del",
"vcpu-set",
]
"top",
"unpause",
"uptime",
+ "usb-add",
+ "usb-del",
"vcpu-list",
"vcpu-pin",
"vcpu-set",
else:
mem_target = int_unit(args[1], 'm')
server.xend.domain.setMemoryTarget(dom, mem_target)
+
+def xm_usb_add(args):
+ arg_check(args, "usb-add", 2)
+ server.xend.domain.usb_add(args[0],args[1])
+
+def xm_usb_del(args):
+ arg_check(args, "usb-del", 2)
+ server.xend.domain.usb_del(args[0],args[1])
def xm_vcpu_set(args):
arg_check(args, "vcpu-set", 2)
"tmem-set": xm_tmem_set,
"tmem-freeable": xm_tmem_freeable_mb,
"tmem-shared-auth": xm_tmem_shared_auth,
+ #usb
+ "usb-add": xm_usb_add,
+ "usb-del": xm_usb_del,
}
## The commands supported by a separate argument parser in xend.xm.